package repobean

import (
	"errors"
	"gitee.com/gitee-go/core/models"
	"regexp"
	"strings"
)

type PipelineInfo struct {
	RepoId string     `json:"repoId,omitempty"`
	Branch string     `json:"branch,omitempty"`
	Yml    models.YML `json:"Yml,omitempty"`
	Upload bool       `json:"upload"`
}

type Repo struct {
	Id       string `xorm:"not null pk VARCHAR(64)"`
	Openid   string `xorm:"comment('数据来源方唯一标识') VARCHAR(100)"`
	Org      string `xorm:"VARCHAR(100)"`
	Owner    string `xorm:"VARCHAR(255)"`
	Name     string `xorm:"VARCHAR(255)"`
	Url      string `xorm:"TEXT"`
	RepoType string `xorm:"VARCHAR(255)"`
}

type ParamGetRepo struct {
	//Visible int `json:"visible"`
	//Affiliation string `json:"affiliation"`
	Q         string `json:"q"`
	Namespace string `json:"namespace"`
	Page      int64  `json:"page"`
	Size      int64  `json:"size"`
}

type RepoVariable struct {
	Id       string `json:"id"`
	RepoId   string `json:"repoId"`
	Name     string ` json:"name"`
	Value    string ` json:"value"`
	Public   int    ` json:"public"`
	ReadOnly int    ` json:"readOnly"`
	Remarks  string ` json:"remarks"`
}

func (c *RepoVariable) Check() error {
	if c.Name == "" {
		return errors.New("请输入变量名")
	}
	if c.Value == "" {
		return errors.New("请输入变量值")
	}
	c.Name = strings.ToUpper(c.Name)
	if regexp.MustCompile(`^(GITEE_|[0-9])`).MatchString(c.Name) {
		return errors.New("变量名不能以Gitee下划线或者数字开头")
	}
	if !regexp.MustCompile(`^[a-zA-Z0-9_]{1,255}$`).MatchString(c.Name) {
		return errors.New("支持字母+数字+下划线组合，长度不能超过 255 个字符")
	}
	if len(c.Value) > 65535 {
		return errors.New("变量值长度不能超过 65535 个字符")
	}
	if len(c.Remarks) > 128 {
		return errors.New("备注长度不能超过 128 个字符")
	}
	return nil
}
